package com.shenshen.Unit;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

public class StreamUtil {
	/**
	 * 功能：批量关闭流。
	 *
	 * @param AutoCloseable... closeables 多个可关闭的对象
	 */
	public static void closings(AutoCloseable... closeables) {
		// TODO 实现代码
		try {
			for (int i = 0; i < closeables.length; i++) {
				closeables[i].close();
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	/**
	 * 功能：流处理，默认不关闭流
	 *
	 * @param InputStream  inputStream 输入流
	 * @param OutputStream outputStream 输出流
	 */
	public static void copy(InputStream inputStream, OutputStream outputStream) throws IOException {
		// TODO 实现代码

		byte b[] = new byte[1024];
		while (inputStream.read(b) > 0) {
			outputStream.write(b);
		}

	}

	/**
	 * 功能：读取文本流，也可以将流转成字符串，默认编码为UTF-8
	 *
	 * @param InputStream inputStream 输入流
	 * @param boolean     isClose 读完后是否关闭流
	 *
	 * @return 字符串
	 */
	public static String asString(InputStream src, boolean isClose) throws IOException {
		// TODO 实现代码

		StringBuilder sb = new StringBuilder();

		byte[] b = new byte[1024];
		int len;
		try {
			while ((len = src.read(b)) != -1) {
				// return new String(b, 0, len);
				sb.append(new String(b));
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭流
			if (isClose)
				closings(src);
		}

		return sb.toString();

	}

	/**
	 * 功能：读取文本流，也可以将流转成字符串
	 *
	 * @param InputStream inputStream 输入流
	 * @param String      encoding 指定编码
	 * @param boolean     isClose 读完后是否关闭流
	 *
	 * @return 字符串
	 */
	public static String asString(InputStream src, String encode, boolean isClose) throws IOException {
		// TODO 实现代码

		StringBuilder sb = new StringBuilder();

		byte[] b = new byte[1024];
		int len;
		try {
			while ((len = src.read(b)) != -1) {
				// return new String(b, 0, len);
				sb.append(new String(b, encode));
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			// 关闭流
			if (isClose)
				closings(src);
		}

		return sb.toString();

	}

	/**
	 * 功能：写文本流，默认为UTF-8编码
	 *
	 * @param String       content 要写入的内容
	 * @param OutputStream outputStream 输出流
	 * @param boolean      isClose 读完后是否关闭流
	 *
	 */
	public static void writingString(String content, OutputStream outputStream, boolean isClose) throws IOException {
		// TODO 实现代码
		writingString(content, outputStream, "utf-8", isClose);
	}

	/**
	 * 功能：写文本流，默认为UTF-8编码
	 *
	 * @param String       content 要写入的内容
	 * @param OutputStream outputStream 输出流
	 * @param String       encode 指定编码
	 * @param boolean      isClose 读完后是否关闭流
	 */
	public static void writingString(String content, OutputStream outputStream, String encode, boolean isClose)
			throws IOException {
		// TODO 实现代码
		byte[] bytes = content.getBytes(encode);
		outputStream.write(bytes);
		if (isClose)
			closings(outputStream);
	}

	/**
	 * 功能：按行读取文本文件，返回一个List集合，默认编码为UTF-8，默认关闭流
	 *
	 * @param File    textFile 文本文件
	 * @param String  encode 指定编码
	 * @param boolean isClose 处理完成后是否关闭流
	 *
	 * @return 字符串集合
	 */
	public static List<String> readingLineFormTextFile(File textFile) throws IOException {
		return readingLineFormTextFile(textFile, "utf-8");

	}

	/**
	 * 功能：按行读取文本文件，返回一个List集合，默认编码为UTF-8
	 *
	 * @param File   textFile 文本文件
	 * @param String encode 指定编码
	 *
	 * @return 字符串集合
	 */
	public static List<String> readingLineFormTextFile(File textFile, String encode) throws IOException {
		// TODO 实现代码
		// TODO 实现代码

		List<String> list = new ArrayList<String>();

		BufferedInputStream is;

		// new InputStreamReader(in, dec)
		BufferedReader br = new BufferedReader(new FileReader(textFile));
	
		String line = "";
		while ((line = br.readLine()) != null) {
			list.add(line);
		}
		return list;
	}

}
